package org.linzhu.Connect4.core;

/**
 *
 * @author zhulin
 */
public interface Connect4Game {

    int getColumnCount();

    int getRowCount();

    /**
     * Retrieve the player at the given column and row index on the board; null if it's empty.
     **/
    Player getPlayerAt(int columnIndex, int rowIndex);

    /**
     * Retrieve the current status of the game
     * @return Status of the game: ongoing, player one wins, player two wins, or a draw.
     **/
    Status getStatus();
    
    /**
     * A player drops a markble at a specific column
     * @param player
     * @param columnIndex the index for the column
     * @return the index of the row the marble is in
     * @throws
     **/
    int dropMarble(Player player, int columnIndex) throws Connect4Exception;
}
